package com.ktg.mes.pro.service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;


import com.alibaba.fastjson.JSONObject;
import com.ktg.common.core.domain.model.SqlResult;
import com.ktg.mes.pro.domain.ProTask;
import com.ktg.mes.pro.domain.ProTaskDeviceProcess;
import com.ktg.mes.rec.domain.RecLnspectionRecord;
import com.ktg.mes.unit.other.ZLService;
import com.ktg.mes.util.LService;

/**
 * 生产任务Service接口
 *
 * @author yinjinlu
 * @date 2022-05-14
 */
public interface IProTaskService extends ZLService<ProTask>
{
    /**
     * 查询生产任务
     *
     * @param taskId 生产任务主键
     * @return 生产任务
     */
    public ProTask selectProTaskByTaskId(Long taskId);

    /**
     * 查询生产任务列表
     *
     * @param proTask 生产任务
     * @return 生产任务集合
     */
    public List<ProTask> selectProTaskList(ProTask proTask);

    /**
     * 新增生产任务
     *
     * @param proTask 生产任务
     * @return 结果
     */
    public SqlResult insertProTask(ProTask proTask);

    /**
     * 修改生产任务
     *
     * @param proTask 生产任务
     * @return 结果
     */
    public SqlResult updateProTask(ProTask proTask);


    /**
     * 批量删除生产任务
     *
     * @param taskIds 需要删除的生产任务主键集合
     * @return 结果
     */
    public SqlResult deleteProTaskByTaskIds(Long[] taskIds);


    /**
     * 查询比当前日期大的生产任务
     * @return
     */
    List<ProTask> selectTaskList(Date startDate,Date endDate);

    /**
     * 查询打印数据(产品)
     * @param taskId
     * @return
     */
    ProTask selectPrintData(String taskId);


    /**
     * 查询当天排产任务
     * @param proTask
     * @return
     */
    List<ProTask> selectTimeOfTheDayProTask(ProTask proTask);



    /**
     *  打印批号 年月+流水号
     * @return
     */
    String selectPrintBatchNo();





    /**
     *  根据采集的数据修改 生产关联（排产任务，生产设备，工序）
     * @param taskDeviceProcess
     * @return
     */
    String updateFromProTaskDeviceProcess(ProTaskDeviceProcess taskDeviceProcess);

    public List<JSONObject> selectCountProTask(String startTime, String endTime);

    public List<JSONObject> selectBomFromItem(List<Long> itemIds);

//    /**
//     * 跟新未入库剩余数量和排产任务状态
//     * @param taskIds
//     */
//    public void updateQuantityNotInAndTaskStatus(List<Long> taskIds);

}
